ui/workspacesView.js \
ui/workspaceSwitcherPopup.js \
ui/xdndHandler.js \
- ui/xkbHandler.js \
ui/components/__init__.js \
ui/components/autorunManager.js \
ui/components/automountManager.js \
const WindowManager = imports.ui.windowManager;
const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler;
-const XkbHandler = imports.ui.xkbHandler;
const Util = imports.misc.util;
const OVERRIDES_SCHEMA = 'org.gnome.shell.overrides';
let uiGroup = null;
let magnifier = null;
let xdndHandler = null;
-let xkbHandler = null;
let keyboard = null;
let layoutManager = null;
let _startDate;
uiGroup = layoutManager.uiGroup;
xdndHandler = new XdndHandler.XdndHandler();
- xkbHandler = new XkbHandler.XkbHandler();
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
osdWindow = new OsdWindow.OsdWindow();
overview = new Overview.Overview();
+++ /dev/null
-// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
-
-const Clutter = imports.gi.Clutter;
-const St = imports.gi.St;
-
-const Lang = imports.lang;
-const Layout = imports.ui.layout;
-const Main = imports.ui.main;
-const Shell = imports.gi.Shell;
-const Tweener = imports.ui.tweener;
-
-const FADE_TIME = 0.1;
-
-const XkbHandler = new Lang.Class({
- Name: 'XkbHandler',
-
- _init: function() {
-
- global.connect('xkb-state-changed', Lang.bind(this, this._onStateChange));
- this.actor = new St.Widget({ x_expand: true,
- y_expand: true,
- x_align: Clutter.ActorAlign.END,
- y_align: Clutter.ActorAlign.END,
- margin_left: 100,
- margin_right: 100,
- margin_bottom: 100});
- this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true }));
- this._box = new St.BoxLayout({ style_class: 'osd-window',
- vertical: true });
- this.actor.add_actor(this._box);
-
- this._label = new St.Label();
- this._box.add(this._label);
-
- Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
-
- this.actor.hide();
- },
-
- _onStateChange: function(obj, latched, locked) {
- mods = [ 'Shift', 'Caps', 'Ctrl', 'Alt', 'Num Lock', '', 'Super', '' ];
- markup = '';
- for (let i = 0; i < 8; i++) {
- if (locked & (1 << i))
- {
- if (markup != '') markup += ' ';
- markup += '<b>' + mods[i] + '</b>';
- }
- else if (latched & (1 << i))
- {
- if (markup != '') markup += ' ';
- markup += mods[i];
- }
- }
-
- this._label.clutter_text.set_markup (markup);
- if (latched != 0 || locked != 0)
- {
- this.actor.show();
- this.actor.opacity = 0;
- Tweener.addTween(this.actor,
- { opacity: 255,
- time: FADE_TIME,
- transition: 'easeOutQuad' });
- }
- else
- {
- this.actor.hide();
- }
- log ('xkb state changed, latched: ' + latched + ' locked: ' + locked);
- }
-});
#include <gjs/gjs.h>
#include <meta/display.h>
#include <meta/meta-plugin.h>
-#include <X11/XKBlib.h>
#include "shell-global-private.h"
#include "shell-perf-log.h"
guint have_swap_event : 1;
CoglContext *cogl_context;
- int xkb_event_base;
- XkbDescPtr xkb;
-
ShellGlobal *global;
};
int status;
GjsContext *gjs_context;
ClutterBackend *backend;
- MetaScreen *screen;
- MetaDisplay *display;
- Display *xdisplay;
- int xkb_base_error_type, xkb_opcode;
backend = clutter_get_default_backend ();
shell_plugin->cogl_context = clutter_backend_get_cogl_context (backend);
"GL buffer swap complete event received (with timestamp of completion)",
"x");
- screen = meta_plugin_get_screen (META_PLUGIN (shell_plugin));
- display = meta_screen_get_display (screen);
- xdisplay = meta_display_get_xdisplay (display);
- if (!XkbQueryExtension (xdisplay, &xkb_opcode,
- &shell_plugin->xkb_event_base,
- &xkb_base_error_type,
- NULL, NULL))
- {
- shell_plugin->xkb_event_base = -1;
- g_message ("could not find XKB extension.");
- }
- else
- {
- shell_plugin->xkb = XkbGetMap (xdisplay,
- XkbAllComponentsMask,
- XkbUseCoreKbd);
- XkbSelectEvents (xdisplay, XkbUseCoreKbd,
- XkbAllEventsMask, XkbAllEventsMask);
- }
-
shell_plugin->global = shell_global_get ();
_shell_global_set_plugin (shell_plugin->global, META_PLUGIN (shell_plugin));
if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
return TRUE;
- if (xev->type == shell_plugin->xkb_event_base &&
- _shell_global_check_xkb_event (shell_plugin->global, xev))
- return TRUE;
-
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
}
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
XEvent *xev);
-gboolean _shell_global_check_xkb_event (ShellGlobal *global,
- XEvent *xev);
-
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
#include <locale.h>
#include <X11/extensions/Xfixes.h>
-#include <X11/XKBlib.h>
#include <canberra.h>
#include <canberra-gtk.h>
#include <clutter/glx/clutter-glx.h>
XDND_POSITION_CHANGED,
XDND_LEAVE,
XDND_ENTER,
- XKB_STATE_CHANGED,
NOTIFY_ERROR,
LAST_SIGNAL
};
NULL, NULL, NULL,
G_TYPE_NONE, 0);
- shell_global_signals[XKB_STATE_CHANGED] =
- g_signal_new ("xkb-state-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL, NULL,
- G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
-
shell_global_signals[NOTIFY_ERROR] =
g_signal_new ("notify-error",
G_TYPE_FROM_CLASS (klass),
return global->session_mode;
}
-
-static void
-notify_xkb_state (ShellGlobal *global,
- XkbStateNotifyEvent *event)
-{
- if (event->changed & (XkbModifierLatchMask | XkbModifierLockMask))
- g_signal_emit_by_name (G_OBJECT (global), "xkb-state-changed",
- event->latched_mods, event->locked_mods);
-}
-
-gboolean
-_shell_global_check_xkb_event (ShellGlobal *global,
- XEvent *event)
-{
- XkbEvent *xkb_event = (XkbEvent *)event;
-
- switch (xkb_event->any.xkb_type)
- {
- case XkbStateNotify:
- notify_xkb_state (global, &xkb_event->state);
- break;
- default:
- break;
- }
-
- return FALSE;
-}